<?php
/**
 * paquete actions.
 *
 * @package    courier
 * @subpackage paquete
 * @author     Your name here
 */
class paqueteActions extends sfActions
{
  public function executeIndex(sfWebRequest $request)
  {
    $this->Paquetes = PaquetePeer::doSelect(new Criteria());
  }

  public function executeShow(sfWebRequest $request)
  {
    $this->Paquete = PaquetePeer::retrieveByPk($request->getParameter('paq_id'));
    $this->forward404Unless($this->Paquete);
  }

  /*
   public function executeNew:
   
   Se hace una petición para traer la clave primaria de la solicitud creada:
   	Si petición != null, generamos el numero de tracking de forma aleatoria 
        para luego colocarlo junto con la clave solicitada en el formulario
	de paquete.
	Si la petición es null, se crea el formulario de paquete por defecto.
  */
  public function executeNew(sfWebRequest $request)
  {
	if ($request->getParameter('sol_id') != null){
		$identificadorSolicitud = new Paquete();
		$trackingNumber = rand(100000000,999999999);
		$identificadorSolicitud->setPaqSolicitud($request->getParameter('sol_id'));
		$identificadorSolicitud->setPaqTrackingnum($trackingNumber);
		$this->form = new PaqueteForm($identificadorSolicitud);
	}
	else{
		$this->form = new PaqueteForm();
	}
  }

  /*
   public function executeCreate:

   
  */
  public function executeCreate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST));

    $this->form = new PaqueteForm();

    $this->processForm($request, $this->form);

    $this->setTemplate('new');
  }

  /*
   public function executeEdit:

   Crea el formulario para modificar el paquete. 
   Esta acción es creada de manera automática por el framework. 
  */
  public function executeEdit(sfWebRequest $request)
  {
    $this->forward404Unless($Paquete = PaquetePeer::retrieveByPk($request->getParameter('paq_id')), sprintf('Object Paquete does not exist (%s).', $request->getParameter('paq_id')));
    $this->form = new PaqueteForm($Paquete);
  }

  /*
   public function executeUpdate:

   Esta acción es llamada por el formulario una vez el usuario termina la edición.
   Se crea un nuevo formulario con los parametros modificados y se llama a la
   acción processForm.
  */
  public function executeUpdate(sfWebRequest $request)
  {
    $this->forward404Unless($request->isMethod(sfRequest::POST) || $request->isMethod(sfRequest::PUT));
    $this->forward404Unless($Paquete = PaquetePeer::retrieveByPk($request->getParameter('paq_id')), sprintf('Object Paquete does not exist (%s).', $request->getParameter('paq_id')));
    $this->form = new PaqueteForm($Paquete);

    $this->processForm($request, $this->form);

    $this->setTemplate('edit');
  }

  /*
   public function executeDelete:

   Esta acción es llamada desde el formulario de edición.
   Antes de ser ejecutada, se pregunta desde el formulario si realmente se desea
   borrar el registro.
	Si -> se ejecuta esta acción y se redirecciona a la lista de paquetes
  */
  public function executeDelete(sfWebRequest $request)
  {
    $request->checkCSRFProtection();

    $this->forward404Unless($Paquete = PaquetePeer::retrieveByPk($request->getParameter('paq_id')), sprintf('Object Paquete does not exist (%s).', $request->getParameter('paq_id')));
    $Paquete->delete();

    $this->redirect('paquete/index');
  }

  protected function processForm(sfWebRequest $request, sfForm $form)
  {
    $form->bind($request->getParameter($form->getName()), $request->getFiles($form->getName()));
    if ($form->isValid())
    {
      $Paquete = $form->save();
      $fac_id = $this->facturacion($request->getParameter('paquete[paq_peso]'), $request->getParameter('paquete[paq_solicitud]'));
      $this->redirect('factura/show?fac_id='.$fac_id);
    }
  }
  

  public function facturacion($pesoPaquete, $solicitud)
  {
		$solicitudPaquete = (int)$solicitud;

		$numFactura = FacturaPeer::generarNumFactura();
		$direccionFiscal = FacturaPeer::setDireccionFiscal();
		$rif = FacturaPeer::setRif();
		$envioPorPaquete = FacturaPeer::calcularMontoPorPeso($pesoPaquete);
		$iva = FacturaPeer::setIva();
		$montoTotal = FacturaPeer::calcularMontoTotalConIva(1,$pesoPaquete);
		$telefono = FacturaPeer::setTelefono();

		$factura = new Factura();
		$factura->setFacNumFactura($numFactura);
		$factura->setFacRif($rif);
		$factura->setFacDirFiscal($direccionFiscal);
		$factura->setFacCantPaquete(1);
		$factura->setFacEnvioXPaquete($envioPorPaquete);
		$factura->setFacMontoTotal($montoTotal);
		$factura->setFacSolicitud($solicitudPaquete);
		$factura->setFacTelefonos($telefono);
		$factura->save();
		$talFactura = $factura->getFacId();

		$talonario = new Talonario();
		$talonario->setTalUrl('http://courier.com.localhost/solicitud/updateStatus/sol_id/'.$solicitudPaquete);
		$talonario->setTalFactura($talFactura);
		$talonario->save();

		return $talFactura;

  }
  

}
